package controller;

import domain.Admin;
import domain.Recruiter;
import domain.Resume;
import service.RecruiterService;
import service.RegisterService;
import service.ResumeService;
import service.impl.RecruiterServiceImpl;
import service.impl.ResumeServiceImpl;
import ui.RecruiterUI;
import ui.ResumeUI;
import ui.WelcomeUI;
import util.CheckUtil;
import util.InputUtil;
import util.PrintUtil;
import util.SessionUtil;

import java.util.List;
import java.util.Objects;

public final class RecruiterController {
    private RecruiterController() {}
    private static final RecruiterService recruiterService = RecruiterServiceImpl.getINSTANCE();
    private static final RegisterService registerService = RecruiterServiceImpl.getINSTANCE();
    private static final ResumeService resumeService = ResumeServiceImpl.getINSTANCE();

    /**
     * 招聘者模块入口
     */
    public static void run() {
        /*
         * 招聘者入口
         * 1、登录
         * 2、注册
         * 0、退出模块
         */
        while (true){
            //调用welcomeui中的方法拼接显示页面
            WelcomeUI.firstView("招聘者");
            switch (InputUtil.getInputInteger("请输入选项：",0,2)){
                case 1:
                    //选项1 登录
                    login();
                    break;
                case 2:
                    //选项2 注册
                    register();
                    break;
                case 0:
                    //返回上级调用该方法的位置，方法结束
                    return;
            }
        }
    }

    /**
     * 招聘者登录
     */
    public static void login() {
        /*
         * 招聘者登录
         * 1、输入手机号
         * 2、判断手机号，格式错误（请重新输入），格式正确继续
         * 3、输入密码
         * 4、判断密码是否正确，登录失败请重试返回上一级，密码正确登录成功
         * 5、index() 进行接下来操作
         */
        PrintUtil.printLine();
        PrintUtil.printString("招聘者登录");
        PrintUtil.printLine();
        String tel=InputUtil.getInputText("请输入登录手机号");
        while (!CheckUtil.checkTel(tel)) {
            System.out.println("输入的手机号格式错误!");
            tel = InputUtil.getInputText("请重新输入:");
        }
        String pw = InputUtil.getInputText("请输入密码：");
        Recruiter recruiter = recruiterService.login(tel,pw);
        if (recruiter == null) {
            PrintUtil.printString("密码输入错误，请重新登录：");
            return;
        }
        PrintUtil.printString("登陆成功！");
        SessionUtil.setRecruiter(recruiter);
        index();
    }

    /**
     * 招聘者注册
     */
    public static void register() {
        /*
         * 招聘者注册
         * 1、输入手机号，判断手机号，格式错误（请重新输入），格式正确继续
         * 2、输入密码，判断密码是否正确，登录失败请重试，密码正确登录成功
         * 3、输入名称，判断名称是否正确，格式错误（请重新输入），格式正确继续
         * 4、输入性别数字
         * 5、输入个性签名
         * 6、根据注册返回值判断，为1时注册成功，否则失败，返回上一级
         */
        PrintUtil.printLine();
        PrintUtil.printString("招聘者注册");
        PrintUtil.printLine();
        Recruiter recruiter =new Recruiter();
        recruiter.setTel(RegisterController.getTel(registerService));
        recruiter.setPassword(RegisterController.getPassword());
        recruiter.setName(RegisterController.getName(registerService));
        recruiter.setSex(InputUtil.getInputInteger("请输入性别(男:0 女:1):", 0, 1));
        recruiter.setSignature(InputUtil.getInputText("请输入个性签名:"));

        //
        if (recruiterService.registerRecruiter(recruiter) > 0) {
            PrintUtil.printString("注册成功！");
        } else {
            PrintUtil.printString("注册失败，请重试！");
        }
    }

    /**
     * 登录后招聘者首页
     */
    private static void index() {

        /*
         * 求职者首页
         * 1、招聘广场 WorkController.run();
         * 2、审核简历 checkResumeByRecruiter();
         * 3、个人信息 managePersonInformation();
         * 0、退出登录
         */
        while (true) {
            RecruiterUI.index();
            switch (InputUtil.getInputInteger("请输入选项：",0,3)){
                case 1:
                    WorkController.run();
                    break;
                case 2:
                    checkResumeByRecruiter();
                    break;
                case 3:
                    managePersonInformation();
                    break;
                case 0:
                    SessionUtil.setRecruiter(null);
                    PrintUtil.printString("退出成功！");
                    return;
            }
        }
    }

    /**
     * 修改招聘者个人信息界面
     */
    public static void managePersonInformation() {
        /*
         * RecruiterUI.personInformation(recruiter);
         * 请选择需要修改的项
         * 1、修改名称
         * 2、修改电话号码，先输入原电话号码，判断电话号码是否一致，一致再输入新电话号码
         * 3、修改密码，先输入原密码，判断密码是否一致，一致再输入新密码
         * 4、修改性别
         * 5、修改个性签名
         * 0、返回上级
         * RecruiterService.resetRecruiter(recruiter);
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        while (true){
            //显示当前recruiter的所有信息
            RecruiterUI.personInformation(recruiter);
            switch (InputUtil.getInputInteger("请输入需要修改的选项",0,5)){
                case 1:
                    //修改名称
                    recruiter.setName(RegisterController.getName(registerService));
                    break;
                case 2:
                    //修改电话号码
                    if(!Objects.equals(recruiter.getTel(),InputUtil.getInputText("请输入原电话号码："))){
                        PrintUtil.printString("输入电话号码有误，请重试！");
                        break;
                    }
                    PrintUtil.printString("请输入新电话号码：");
                    recruiter.setTel(RegisterController.getTel(registerService));
                    break;
                case 3:
                    //修改密码
                    if(!Objects.equals(recruiter.getPassword(),InputUtil.getInputText("请输入原密码："))){
                        PrintUtil.printString("密码错误！请重试！");
                        break;
                    }
                    recruiter.setPassword(RegisterController.getPassword());
                    break;
                case 4:
                    //修改性别
                    PrintUtil.printString("请输入新性别(男:0 女:1):");
                    recruiter.setSex(InputUtil.askForInt());
                case 5:
                    //修改个性签名
                    recruiter.setSignature(InputUtil.getInputText("请输入新个性签名："));
                    break;
                case 0:
                    return;
            }
            if(recruiterService.resetRecruiter(recruiter) == 1) PrintUtil.printString("更新信息成功");
            else PrintUtil.printString("更新信息失败");
        }
    }

    /**
     * 简历审核
     */
    public static void checkResumeByRecruiter() {
        /*
         * 显示所有投递的简历
         * List<Resume> resumes = resumeService.selectByRecruiterId();
         * ResumeUI.showResumeList(resumes);
         * 1、输入简历编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Resume resume = resumes.get();
         * 2、显示工作详细信息调用ResumeUI.showDetailResume(resume);
         * 3、显示管理员审核操作调用RecruiterUI.showRecruiterOperator();
         * 4、根据输入判断是否通过审核，输入为1调用resumeService.onResume(resume)将resume状态设置为1已通过并且输出简历通过审核，输入为0则不需要操作，输出为简历未通过审核并返回
         */
        Recruiter recruiter = SessionUtil.getRecruiter();
        PrintUtil.printString("当前未审核简历：");
        while(true) {
            List<Resume> resumes = resumeService.selectByRecruiterId(recruiter.getId());
            ResumeUI.showResumeList(resumes);
            int check = InputUtil.getInputInteger("请输入待审核的简历编号：", 0, resumes.size());
            if(check == 0) return;
            Resume resume = resumes.get(check - 1);
            ResumeUI.showDetailResume(resume);
            RecruiterUI.showRecruiterOperator();
            switch (InputUtil.getInputInteger("请输入审核结果(通过:1 不通过:2):", 0,2)) {
                case 1:
                    if(resumeService.onResume(resume)==1) PrintUtil.printString("简历通过审核");
                    else PrintUtil.printString("简历审核失败");
                    return;
                case 2:
                case 0:
                    return;
            }
        }
    }
}
